import java.util.*;

class Solution {
    public long maxSum(List<Integer> nums, int m, int k) {
        int n=nums.size();
        Map<Integer,Integer> map=new HashMap<>();
        long ans=0;
        long sum=0;
        for (int i = 0; i < k; i++) {
            int t=nums.get(i);
            sum+=t;
            map.put(t, map.getOrDefault(t,0)+1);
        }

        if(map.size()>=m){
            ans=Math.max(ans,sum);
        }
        sum-= nums.get(0);
        int tt=nums.get(0);
        if(map.get(tt)==1){
            map.remove(tt);
        }else{
            map.put(tt, map.getOrDefault(tt,0)-1);
        }

        for (int i = k; i < n; i++) {
            //放入窗口
            int t=nums.get(i);
            sum+=t;
            map.put(t, map.getOrDefault(t,0)+1);

            if(map.size()>=m){
                ans=Math.max(ans,sum);
            }
            sum-= nums.get(i-k+1);
            int tem=nums.get(i-k+1);
            if(map.get(tem)==1){
                map.remove(tem);
            }else{
                map.put(tem, map.getOrDefault(tem,0)-1);
            }
        }

        return ans;
    }
}